package com.jtjrenren.android.taxi.passenger.manger.api;

import java.util.Map;

import retrofit2.http.Field;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;
import retrofit2.http.QueryMap;
import rx.Observable;

/**
 * Created by Administrator on 2016/9/6.
 */

public interface ApiService {

    /*检查版本更新*/
    @GET("/BKingAPI.ashx")
    Observable<String> checkAppConfig(@QueryMap Map<String, String> commonParams);

    /*检查版本更新*/
    @GET("/BKingAPI.ashx")
    Observable<String> checkNewVersion(@QueryMap Map<String, String> commonParams,
                                       @Query("platform") String platform,
                                       @Query("productType") String productType);

    @GET("/BKingAPI.ashx")
    Observable<String> checkNewVersion_M(@QueryMap Map<String, String> commonParams, @Query("curVersion") String version,
                                         @Query("PhoneType") String PhoneType,
                                         @Query("productType") String productType);

    /* 检查用户唯一性*/
    @GET("/BKingAPI.ashx")
    Observable<String> checkPhoneUnie(@QueryMap Map<String, String> commonParams, @Query("PhoneNo") String phone,
                                      @Query("userType") String userType);

    /*检查用户是否能打车*/
    @GET("/BKingAPI.ashx")
    Observable<String> checkUserCall(@QueryMap Map<String, String> commonParams, @Query("userID") String userID);

    /*登录*/
    @POST("/BKingAPI.ashx")
    Observable<String> login(@QueryMap Map<String, String> commonParams, @Query("PhoneNo") String phone, @Query("pwd") String pwd
            , @Query("companyid") String companyid);

    /*获取第三方登录信息 */
    @GET("/BKingAPI.ashx")
    Observable<String> getThirdLoginInfo(@QueryMap Map<String, String> commonParams, @Query("openId") String openId, @Query("loginType") String loginType);

    /*绑定第三方登录手机号*/
    @POST("/BKingAPI.ashx")
    Observable<String> thirdLoginBang(@QueryMap Map<String, String> commonParams, @Query("userId") String userId,
                                      @Query("userTel") String userTel,
                                      @Query("openId") String openId,
                                      @Query("loginType") String loginType,
                                      @Query("accessTokenId") String accessTokenId);

    /* 发送验证码*/
    @GET("/BKingAPI.ashx")
    Observable<String> sendAuthCode(@QueryMap Map<String, String> commonParams, @Query("PhoneNo") String phone, @Query("type") String type);

    /* 验证码登录/注册*/
    @POST("/BKingAPI.ashx")
    Observable<String> loginByAuthCode(@QueryMap Map<String, String> commonParams, @Query("phoneNo") String phone,
                                       @Query("key") String code, @Query("type") String type
            , @Query("companyid") String companyid);


    /* 通过收到的验证码验证手机号，返回验证结果*/
    @GET("/BKingAPI.ashx")
    Observable<String> authPhoneByCode(@QueryMap Map<String, String> commonParams, @Query("key") String key, @Query("PhoneNo") String phone,
                                       @Query("type") String type);


    /* 注册*/
    @POST("/BKingAPI.ashx")
    Observable<String> registerByPhone(@QueryMap Map<String, String> commonParams, @Query("PhoneNo") String phone,
                                       @Query("pwd") String pwd,
                                       @Query("companyid") String companyid);

    /* 重置密码*/
    @POST("/BKingAPI.ashx")
    Observable<String> ResetPassword(@QueryMap Map<String, String> commonParams, @Query("PhoneNo") String phone,
                                     @Query("newpwd") String pwd,
                                     @Query("companyid") String companyid);

    /* 获取用户的详细信息*/
    @GET("/BKingAPI.ashx")
    Observable<String> getUserDetails(@QueryMap Map<String, String> commonParams, @Query("WorkNo") String userId,
                                      @Query("companyid") String companyid);


    /*更新用户信息 */
    @POST("/BKingAPI.ashx")
    Observable<String> updateUserInfo(@QueryMap Map<String, String> commonParams, @Query("WorkNo") String WorkNo,
                                      @Query("name") String name,
                                      @Query("sex") String sex,
                                      @Query("age") String age,
                                      @Query("postAddress") String postAddress);

    /* 获取用户资金账户情况*/
    @GET("/BKingAPI.ashx")
    Observable<String> getUserAmountDetails(@QueryMap Map<String, String> commonParams, @Query("userId") String userId);

    /* 获取用户的充值记录*/
    @GET("/BKingAPI.ashx")
    Observable<String> getChargeHistory(@QueryMap Map<String, String> commonParams, @Query("userId") String userId);


    /*获取司机的详细信息*/
    @GET("/BKingAPI.ashx")
    Observable<String> getDriverDetails(@QueryMap Map<String, String> commonParams, @Query("driverID") String driverId,
                                        @Query("companyid") String companyid);

    /* 获取司机评论列表 */
    @GET("/BKingAPI.ashx")
    Observable<String> getDriverEvaluationList(@QueryMap Map<String, String> commonParams, @Query("driverCounts") String driverCounts,
                                               @Query("driverId") String driverId,
                                               @Query("pageIndex") int pageIndex,
                                               @Query("pageSize") int pageSize);

    /*获取司机的车况信息*/
    @GET("/BKingAPI.ashx")
    Observable<String> getDriverImgs(@QueryMap Map<String, String> commonParams, @Query("carNo") String carNO,
                                     @Query("pageIndex") int pageIndex
            , @Query("pageSize") int pageSize);


    /*打车评价*/
    @POST("/BKingAPI.ashx")
    Observable<String> evaluationAdd(@QueryMap Map<String, String> commonParams, @Query("orderID") String orderID,
                                     @Query("userID") String userID,
                                     @Query("driversID") String driverID,
                                     @Query("level") int level,
                                     @Query("contents") String contents);


    /*提交金豆累积*/
    @POST("/BKingAPI.ashx")
    Observable<String> updateJinDou(@QueryMap Map<String, String> commonParams, @Query("userID") String userID,
                                    @Query("credit") int credit,
                                    @Query("touType") String touType);

    /*获取金豆可以兑换的商品列表 */
    @GET("/BKingAPI.ashx")
    Observable<String> getMaterialList(@QueryMap Map<String, String> commonParams);

    /*获取金豆的记录信息*/
    @GET("/BKingAPI.ashx")
    Observable<String> getJinDouHistory(@QueryMap Map<String, String> commonParams, @Query("userID") String userId);

    /* 获取当前投诉的选项列表 */
    @GET("/BKingAPI.ashx")
    Observable<String> getCompainList(@QueryMap Map<String, String> commonParams);

    /*获取某个订单的投诉内容*/
    @GET("/BKingAPI.ashx")
    Observable<String> getCompaintByOrderID(@QueryMap Map<String, String> commonParams, @Query("orderID") String orderId);

    /*添加投诉*/
    @POST("/BKingAPI.ashx")
    Observable<String> addCompaint(@QueryMap Map<String, String> commonParams, @Query("orderID") String orderID,
                                   @Query("userID") String userID,
                                   @Query("driversID") String driversID,
                                   @Query("content") String content,
                                   @Query("complainCode") String complainCode);

    /*对投诉内容继续回复*/
    @POST("/BKingAPI.ashx")
    Observable<String> replayCompaint(@QueryMap Map<String, String> commonParams, @Query("complaintID") String complaintID,
                                      @Query("contentOfReply") String contentOfReply);


    /* 获取附近的车列表*/
    @GET("/BKingAPI.ashx")
    Observable<String> getAreaCarList(@QueryMap Map<String, String> commonParams, @Query("lat") String lat,
                                      @Query("lng") String lon,
                                      @Query("carType") int cartype,
                                      @Query("radius") String radius,
                                      @Query("mapType") String mapType,
                                      @Query("companyid") String companyid);

    /* 获取订单详情*/
    @GET("/BKingAPI.ashx")
    Observable<String> getOrderDetailByOrderSerNo(@QueryMap Map<String, String> commonParams, @Query("orderID") String orderSerno);

    /* 实时获取订单产生的费用 */
    @GET("/BKingAPI.ashx")
    Observable<String> getOrderCurrCost(@QueryMap Map<String, String> commonParams, @Query("orderId") String orderId);

    /*预估专车费用*/
    @GET("/BKingAPI.ashx")
    Observable<String> estimateSpecarCost(@QueryMap Map<String, String> commonParams, @Query("startAddr") String startAddr,
                                          @Query("startlat") String startLat,
                                          @Query("startlng") String startLng,
                                          @Query("endAddr") String endAddr,
                                          @Query("endlat") String endLat,
                                          @Query("endlng") String endLng,
                                          @Query("cartype") String carType,
                                          @Query("userCarTime") String useTime,
                                          @Query("userId") String userID);

    /* 获取用户的历史订单 */
    @GET("/BKingAPI.ashx")
    Observable<String> getOrderHistory(@QueryMap Map<String, String> commonParams, @Query("userID") String userId,
                                       @Query("pageSize") int pageSize,
                                       @Query("curPage") int curPage,
                                       @Query("type") int type);

    @GET("/BKingAPI.ashx")
    Observable<String> getOrderHistory_M(@QueryMap Map<String, String> commonParams, @Query("userID") String userId,
                                         @Query("pageSize") int pageSize,
                                         @Query("curPage") int curPage,
                                         @Query("orderType") int type);

    /* 获取接驾中状态司机的位置*/
    @GET("/BKingAPI.ashx")
    Observable<String> getDriverPostion(@QueryMap Map<String, String> commonParams, @Query("driversID") String driversID,
                                        @Query("carNo") String carNo,
                                        @Query("terminal") String terminal,
                                        @Query("customerLat") String customerLat,
                                        @Query("customerLng") String customerLng);

    /*获取优惠券信息*/
    @GET("/BKingAPI.ashx")
    Observable<String> getCouponList(@QueryMap Map<String, String> commonParams, @Query("userId") String userId, @Query("carType") int type);

    /* 获取最优的一张使用打车券*/
    @GET("/BKingAPI.ashx")
    Observable<String> getCouponBest(@QueryMap Map<String, String> commonParams, @Query("userId") String userId,
                                     @Query("startLat") String lat,
                                     @Query("startLng") String lon,
                                     @Query("money") String money,
                                     @Query("carType") String type);

    /* 获取预充值订单的流水号*/
    @FormUrlEncoded
    @POST("/BKingAPI.ashx")
    Observable<String> getChargeSerNo(@FieldMap Map<String, String> commonParams, @Field("signId") String signId,
                                      @Field("userId") String userId,
                                      @Field("tradeFair") String tradeFair,
                                      @Field("tradeType") String tradeType);

    /*获取支付订单的支付的流水号*/
    @POST("/BKingAPI.ashx")
    Observable<String> getPaySerNo(@FieldMap Map<String, String> commonParams, @Field("orderID") String orderID,
                                   @Field("wallet") String money,
                                   @Field("payMode") String payMode);

    /*获取支付订单的支付的流水号*/
    @GET("/BKingAPI.ashx")
    Observable<String> getPaySerNo_M(@QueryMap Map<String, String> commonParams, @Query("orderID") String orderID,
                                     @Query("wallet") String money,
                                     @Query("payMode") String payMode,
                                     @Query("CouponsID") String couponsID,
                                     @Query("CouponsAmt") String couponsAmt);

    /* 钱包支付*/
    @POST("/BKingAPI.ashx")
    Observable<String> doQbPay(@QueryMap Map<String, String> commonParams, @Query("orderID") String orderID,
                               @Query("wallet") String moneydes,
                               @Query("payMode") String payMode,
                               @Query("payStatus") String payStatus);

    /* 钱包支付 */
    @POST("/BKingAPI.ashx")
    Observable<String> doQbPay_M(@QueryMap Map<String, String> commonParams, @Query("orderID") String orderID,
                                 @Query("wallet") String moneydes,
                                 @Query("CouponsAmt") String CouponsAmt,
                                 @Query("CouponsID") String couponsID,
                                 @Query("payMode") String payMode,
                                 @Query("payStatus") String payStatus);

    /*生成预处理打车券*/
    @POST("/BKingAPI.ashx")
    Observable<String> createCouponOrder(@QueryMap Map<String, String> commonParams, @Query("signId") String signId,
                                         @Query("couponId") String couponId,
                                         @Query("orderId") String orderId);

    //更改订单状态
    @POST("/BKingAPI.ashx")
    Observable<String> upOrderStatus(@QueryMap Map<String, String> commonParams, @Query("orderID") String orderId,
                                     @Query("changeType") int status);

    //paySerNo  subject  body  price  type
    //获取支付宝的订单信息
    @POST("/BKingAPI.ashx")
    Observable<String> getAlPayInfo(@QueryMap Map<String, String> commonParams, @Query("paySerNo") String paySerNo,
                                    @Query("subject") String subject, @Query("body") String body, @Query("price") String price,
                                    @Query("type") String type);

    @POST("/BKingAPI.ashx")
    Observable<String> getWxPreID(@QueryMap Map<String, String> commonParams, @Query("outTradNo") String paySerNo, @Query("price") String price,
                                  @Query("type") String type);

    /**
     * 充值支付
     *
     * @param commonParams
     * @param phoneType    ios,android
     * @param userId
     * @param type         1：充值(充值时,payMode参数必须为--"1":支付宝；"2": 微信； )；2：支付
     * @param payMode      支付方式: "0": 打车钱包  "1":支付宝；"2": 微信；3" :信用卡 "4" :储蓄卡 "5" :其他 "6":现金
     * @param money        加密金额
     * @param orderID
     * @param CouponsID    打车券id
     * @param CouponsAmt   打车券金额
     * @return
     */
    @POST("/BKingAPI.ashx")
    Observable<String> payN(@QueryMap Map<String, String> commonParams, @Query("phoneType") String phoneType,
                            @Query("userId") String userId, @Query("type") String type,
                            @Query("payMode") String payMode, @Query("money") String money, @Query("orderID") String orderID,
                            @Query("CouponsID") String CouponsID, @Query("CouponsAmt") String CouponsAmt);
}
